/**
 * GroupObj
 *
 */
if(typeof (module) !="undefined"){
    module.exports = PrintPage;

    var Serializer = require('./Serializer');
    var Parser = require('./Parser');
    var PointPath = require('../common/PointPath');

    var common = require('../../../common/common');
}



function PrintPage()
{
    Serializer.call(this);

    this.root = null; // 根对象（LayerObj类型），根对象的直接子只能是LayerObj类型，且根对象至少有一个LayerObj
    this.name = "";  //每一页下面显示的名字
    this.type = 0;  // 0：内页   1：封面   2：封底   3：封面-封底
    this.index=-1;  // 页码，从0开始
    this.w=0;				// 宽
    this.h=0;				// 高
    this.thum = "";			// 页面缩略图地址
    this.dirty=0; 			// 0表示未修改，1表示修改过

}
PrintPage.prototype = new Serializer();

// 转成json字符串
PrintPage.prototype.toJson = function (){
    var superJson = Serializer.prototype.toJson.call(this);
    superJson = superJson.substr(1,superJson.length-2);

    var ret = '{';
    ret+= superJson;
    if(this.root){
        ret +=',';
        ret +=('"root":' + this.root.toJson());
    }
    ret +=',';
    ret +=('"w":'+this.w);
    ret +=',';
    ret +=('"h":'+this.h);
    ret +=',';
    ret +=('"name":'+'"'+this.name+'"');
    ret +=',';
    ret +=('"index":'+this.index);
    if(this.hasOwnProperty('dirty')){
        ret +=',';
        ret +=('"dirty":'+this.dirty);
    }
    if(this.hasOwnProperty('thum')){
        ret +=',';
        ret +=('"thum":'+'"'+this.thum+'"');
    }
    ret+='}';
    return ret;
}
// 从json对象中解析出PointPath
PrintPage.prototype.fromJson = function(jsonObj, versionId){
    Serializer.prototype.fromJson.call(this,jsonObj,versionId);
			
    // 对于子对象，在undo情况下只还原其id即可，在文档初始化的情况下需要将子对象数据存储到id管理器
    this.root = Parser.prototype.fromUnknownJson.call(this, jsonObj.root, versionId);

    this.w = jsonObj.w;
    this.h = jsonObj.h;

    this.name = jsonObj.name;
    this.index = jsonObj.index;

    if(jsonObj.hasOwnProperty('dirty')){
        this.dirty = jsonObj.dirty;
    }
    if(jsonObj.hasOwnProperty('thum')){
        this.thum = jsonObj.thum;
    }
}

/**
 * 将对象添加到PDF中
 * @param doc  PDFDocument结构
 * @param info  对象结构，属性如下：
 *                  docOriginX  文档的新原点 在原始原点的 坐标
 *                  docOriginY  文档的新原点 在原始原点的 坐标
 *                  w   文档宽度
 *                  h   文档高度
 */
PrintPage.prototype.addToPdf = function(doc, info){

    // 描绘裁剪路径
    if(info.hasOwnProperty("w") && info.hasOwnProperty("h")){
        var clip = PointPath.prototype.generateRect(0,0,info.w, info.h);
        var svgPath = clip.toSvgPath();
        doc.path(svgPath).clip();
    }

    // 描绘对象
    this.root.addToPdf(doc,info);



}

// 取得子模板对象(返回subTemplateObj数组)
PrintPage.prototype.getSubTemplateObj= function(key)
{
    return this.root.getSubTemplateObj(key);
}

/**
 * 取得模板中所有文字的轮廓 的di,
 * 返回：数组
 */
PrintPage.prototype.getTextContourDis = function(){
    // 找到每页中的不同类型的SubTemplateObj对象

    return this.root.getTextContourDis();
}
/**
 * 取得本页中所有图片对象,
 * 返回：数组
 */
PrintPage.prototype.getImageObjs = function(){
   return this.root.getImageObjs();
}
/**
 * 设置所有文字的轮廓
 * 参数：vectors： TVectorModel类型的数组
 */
PrintPage.prototype.setTextContour = function(vectors){
    this.root.setTextContour(vectors);

}
/**
 * 设置颜色模式
 */
PrintPage.prototype.setColorMode = function(cm){
    this.colorMode = cm;
    this.root.setColorMode(cm);
}

/**
 * 取得模板中所有文字对象,
 * 参数：ignoreEmpty   Di，true表示需要过滤掉无效di的文字对象
 * 返回：数组
 */
PrintPage.prototype.getTextObjs = function(ignoreEmptyDi){
   return this.root.getTextObjs(ignoreEmptyDi);
}

// 简化可替换group
// callback 返回：replaceableGroup
PrintPage.prototype.simplifyReplaceGroup = function (callback){
    // 将root中非可替换部分，删除
    if(this.root.simplifyReplaceGroup()){
        callback(null, this.root);
    }else{
        callback(null, null);
    }


}
